// #include <stdio.h>//两人猜数字，出数字和猜数字的人分别出的3个数字和猜的3个数字放在两个数组里

// int game(int* guess, int guessSize, int* answer, int answerSize)
// {
//     int count=0;
//     for(int i=0;i<guessSize;i++)
//     {
//         if(guess[i]==answer[i])
//         {
//             count++;
//         }
//     }
//     return count;
// }
// int main()
// {
//     int guess[3]={0};
//     int answer[3]={0};
//     scanf("guess=[%d,%d,%d],answer=[%d,%d,%d]",guess,guess+1,guess+2,answer,answer+1,answer+2);
//     for(int i=0;i<3;i++)
//     {
//     printf("%d",guess[i]);
//     }
//     printf("\n");
//     for(int i=0;i<3;i++)
//     {
//         printf("%d",answer[i]);
//     }
//     printf("\n");
//     int count=game(guess,3,answer,3);
//     printf("%d",count);
//     return 0;
// }


// #include <stdio.h>
// #include <stdlib.h>
// void print(int arr[],int sz)
// {
//     for(int i=0;i<sz;i++)
//     {
//         printf("%d ",arr[i]);
//     }
//     printf("\n");
// }
// // int cmp_int(const void* p1,const void* p2)
// // {
// //     if(*(int*)p1<*(int*)p2)
// //     {
// //         return 1;
// //     }
// //     else if(*(int*)p1>*(int*)p2)
// //     {
// //         return -1;
// //     }
// //     else
// //     return 0;
// // }
// struct Stu
//     {
//         char name[20];
//         int age;
//     };
// // int cmp_stu_by_age(const void* p1,const void* p2)
// // {
// //     return (*(struct Stu*)p1).age-(*(struct Stu*)p2).age;
// // }
// int cmp_stu_by_age(const void* p1,const void* p2)

// {
//     return ((struct Stu*)p1)->age-((struct Stu*)p2)->age;
// }
// void print_stu(struct Stu arrr[],int sz)
// {
//     for(int i=0;i<sz;i++)
//     {
//         printf("%s %d\n",arrr[i].name,arrr[i].age);
//     }
// }
// void test_struct()
// {
//     struct Stu arrr[]={{"zhangsan",20},{"lisi",19},{"wangwu",26}};
//     int sz=sizeof(arrr)/sizeof(arrr[0]);
//     print_stu(arrr,sz);
//     qsort(arrr,sz,sizeof(arrr[0]),cmp_stu_by_age);
//     print_stu(arrr,sz);
// }
// int cmp_int(const void* p1,const void* p2)//升序
// {
//     return *(int*)p1-*(int*)p2;
// }

// int main()//学会应用qsort函数
// {
//     int arr[10]={6,2,7,0,9,5,4,8,3,1};
//     int sz=sizeof(arr)/sizeof(arr[0]);
//     print(arr,sz);
//     qsort(arr,sz,sizeof(arr[0]),cmp_int);
//     print(arr,sz);
//     test_struct();
//     return 0;
// }



#include <stdio.h>
int cmp_int(const void* p1,const void* p2)
{
    return *(int*)p1-*(int*)p2;
}
void print(int arr[],int sz)
{
    for(int i=0;i<sz;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
}
void swap(char* p1,char* p2,int width)
{
    for(int i=0;i<width;i++)
    {
        char tmp=*p1;
        *p1=*p2;
        *p2=tmp;
        p1++;
        p2++;
    }
}
void bubble_sort(void* arr,int sz,int width,int (*cmp)(const void* p1,const void* p2))
{
    for(int i=0;i<sz-1;i++)
    {
        for(int j=0;j<sz-i-1;j++)
        {
            if(cmp((char*)arr+j*width,(char*)arr+(j+1)*width)>0)
            {
                swap((char*)arr+j*width,(char*)arr+(j+1)*width,width);
            }
        }
    }
}
int main()
{
    int arr[10]={6,2,7,0,9,5,4,8,3,1};
    int sz=sizeof(arr)/sizeof(arr[0]);
    print(arr,sz);
    bubble_sort(arr,sz,sizeof(arr[0]),cmp_int);
    print(arr,sz);
    return 0;
}
